package com.fucking.great.context.single;

import com.fucking.great.context.util.SingleUtil;

/**
 * prototype bean工具的使用。
 * 多例抽象工厂。
 * 把自己（工厂）放到单例缓存池中缓存，其他的调用{@link AbstractPrototypeFactory#newPrototypeInstance()}。
 * 其他使用需要自己使用。
 */
public abstract class AbstractPrototypeFactory extends ClassSingleFactory {
    /**
     * @see ClassSingleFactory#ClassSingleFactory(java.lang.Class, boolean)
     * @param singleClassType
     * @param cover
     */
    public AbstractPrototypeFactory(Class<?> singleClassType, boolean cover) {
        super(singleClassType, cover);
    }

    @Override
    /**
     * 把自己
     */
    protected Object newInstance() {
        return this;
    }

    public abstract Object newPrototypeInstance();

    /**
     * 获得多例标识名称。
     * @return
     */
    public  String prototypeFactoryName(){
        return SingleUtil.classToKey(this.getSingleClassType());
    }
}
